//
//  Int+Extension.swift
//  Library_y
//
//  Created by JC on 2023/6/6.
//

import Foundation
import UIKit

// MARK: - Int常用类型转换
extension Int {
    
    /// Int 转 Double
    public var toDouble: Double {
        return Double(self)
    }
    
    /// Int 转 String
    public var toString: String {
        return String(format: "%d", self)
    }
    
    /// Int 转 CGFloat
    public var toCGFloat: CGFloat {
        return CGFloat(self)
    }
    
    /*这是一个内置函数
     lower : 内置为 0，可根据自己要获取的随机数进行修改。
     upper : 内置为 UInt32.max 的最大值，这里防止转化越界，造成的崩溃。
     返回的结果： [lower,upper) 之间的半开半闭区间的数。
     */
    static public func randomIntNumber(lower: Int = 0,upper: Int = Int(UInt32.max)) -> Int {
        return lower + Int(arc4random_uniform(UInt32(upper - lower)))
    }
    /**
     生成某个区间的随机数
     */
    static public func randomIntNumber(range: Range<Int>) -> Int {
        return randomIntNumber(lower: range.lowerBound, upper: range.upperBound)
    }
}

extension Int {
    
    /// 前面补零
    public func insertZero(lenght: Int = 2) -> String {
        return String(format:"%0\(lenght)d", self)
    }
    
    // 距离现在的分钟
    public var distance_now_desc: String {
        let minute = (Tools.stamp - self) / 1000 / 60
        if (0 == minute) {
            return "刚刚"
        } else if (0 < minute && minute < 60) {
            return "\(minute)分钟前·"
        } else if (60 <= minute && minute < 60 * 24) {
            return "\(minute / 60)小时前·"
        } else if (60 * 24 <= minute && minute < 60 * 24 * 30) {
            return "\(minute / 60 / 24)天前·"
        } else if (60 * 24 * 30 <= minute && minute < 60 * 24 * 30 * 365) {
            return "\(minute / 60 / 24 / 30)月前·"
        } else {
            return ""
        }
    }

}

extension Int64 {
    
    // 字节大小转可视化文件大小
    public var toDescSize: String {
        let kb: Double = 1024
        let mb: Double = 1024 * 1024
        let gb: Double = 1024 * 1024 * 1024
        let tb: Double = 1024 * 1024 * 1024 * 1024
        let val: Double = Double(self)
        if val >= 0 && val < kb {
            return String(format: "%.1fB", val)
        } else if val >= kb && val < mb {
            return String(format: "%.1fKB", val / kb)
        } else if val >= mb && val < gb {
            return String(format: "%.1fMB", val / mb)
        } else if val >= gb && val < tb {
            return String(format: "%.1fGB", val / gb)
        } else {
            return String(format: "%.1fTB", val / tb)
        }
    }
}
